package com.ryan.ohos.extension.util;

import ohos.agp.components.Attr;
import ohos.agp.components.AttrSet;
import ohos.agp.components.element.Element;
import ohos.agp.utils.Color;
import ohos.app.Context;

/**
 * AttrSet获取自定义属性工具类
 * <p>
 * 使用方法：
 * xxx extends Component
 * 获取自定义属性：
 * String count = AttrUtils.getInteger(attrSet,"cus_count","0");
 * <p>
 * 属性定义：
 * 布局头中加入  xmlns:hap="http://schemas.huawei.com/apk/res/ohos" 使用hap区分自定义属性与系统属性
 * 即可使用 hap:cus_count="2"  不加直接使用ohos:cus_count="2"
 */
public class AttrUtils {

    /**
     * getInteger
     *
     * @param attrSet
     * @param name         属性名
     * @param defaultValue 默认值
     * @return Integer 获取值
     */
    public static Integer getInteger(AttrSet attrSet, String name, Integer defaultValue) {
        return attrSet.getAttr(name).map(Attr::getIntegerValue).orElse(defaultValue);
    }

    /**
     * getString
     *
     * @param attrSet
     * @param name         属性名
     * @param defaultValue 默认值
     * @return String 获取值
     */
    public static String getString(AttrSet attrSet, String name, String defaultValue) {
        return attrSet.getAttr(name).map(Attr::getStringValue).orElse(defaultValue);
    }

    /**
     * getFloat
     *
     * @param attrSet
     * @param name         属性名
     * @param defaultValue 默认值
     * @return String 获取值
     */
    public static float getFloat(AttrSet attrSet, String name, float defaultValue) {
        return attrSet.getAttr(name).map(Attr::getFloatValue).orElse(defaultValue);
    }

    /**
     * 获取属性 boolean值
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return boolean
     */
    public static boolean getBoolean(AttrSet attrSet, String name, boolean defaultValue) {
        return attrSet.getAttr(name).map(Attr::getBoolValue).orElse(defaultValue);
    }

    /**
     * 获取颜色color值
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return int 色值
     */
    public static int getColorInt(AttrSet attrSet, String name, int defaultValue) {
        int value = defaultValue;
        try {
            if (attrSet.getAttr(name) != null && attrSet.getAttr(name).isPresent()) {
                value = attrSet.getAttr(name).get().getColorValue().getValue();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return value;
    }

    /**
     * getColorObj 获取Color 属性对象
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return Color 对象
     */
    public static Color getColorObj(AttrSet attrSet, String name, String defaultValue) {
        return attrSet.getAttr(name).map(Attr::getColorValue).orElse(new Color(Color.getIntColor(defaultValue)));
    }

    /**
     * getLong
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return long
     */
    public static long getLong(AttrSet attrSet, String name, long defaultValue) {
        return attrSet.getAttr(name).map(Attr::getLongValue).orElse(defaultValue);
    }

    /**
     * getDimensionValue
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return int
     */
    public static int getDimensionValue(AttrSet attrSet, String name, int defaultValue) {
        return attrSet.getAttr(name).map(Attr::getDimensionValue).orElse(defaultValue);
    }

    /**
     * getElement
     *
     * @param attrSet
     * @param name
     * @param defaultValue
     * @return Element
     */
    public static Element getElement(AttrSet attrSet, String name, Element defaultValue) {
        return attrSet.getAttr(name).map(Attr::getElement).orElse(defaultValue);
    }



}
